package com.tz.tzgw.pc.web;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.util.SaResult;
import com.tz.tzgw.pc.web.dao.*;
import com.tz.tzgw.pc.web.model.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import javax.servlet.http.HttpServletRequest;

/**
 * @author tqq
 * PC&移动端主要接口及页面加载
 */
@Controller
public class IndexController {

    private final BannerDao bannerDao;
    private final ArticleDao articleDao;

    private final WebcolumnDao webcolumnDao;

    private final ZtArticleDao ztArticleDao;

    private final ZtVideoDao ztVideoDao;

    private final ZtImagesDao ztImagesDao;
    private final ZtVideoCateDao ztVideoCateDao;

    private final ZtSetDao ztSetDao;

    private final ZhaopinDao zhaopinDao;

    public IndexController(BannerDao bannerDao,ArticleDao articleDao,WebcolumnDao webcolumnDao,ZtArticleDao ztArticleDao,ZtVideoDao ztVideoDao,ZtImagesDao ztImagesDao,ZtVideoCateDao ztVideoCateDao,ZtSetDao ztSetDao,ZhaopinDao zhaopinDao) {

        this.bannerDao = bannerDao;
        this.articleDao = articleDao;
        this.webcolumnDao = webcolumnDao;

        this.ztArticleDao = ztArticleDao;
        this.ztVideoDao = ztVideoDao;
        this.ztImagesDao = ztImagesDao;
        this.ztVideoCateDao = ztVideoCateDao;
        this.ztSetDao = ztSetDao;
        this.zhaopinDao = zhaopinDao;
    }
    // 首页
    @RequestMapping("/")
    public String index(Model model) {
        List <Banner> banners= bannerDao.getAllBanners();
        model.addAttribute("banners", banners);

//        List <Article> casearticles= articleDao.getAllArticleByColumn(11l);
//        model.addAttribute("casearticles", casearticles);
//
//
//        List <Article> tuiarticles= articleDao.getAllArticleByIstui(2,6);
//        model.addAttribute("tuiarticles", tuiarticles);
//
//        List <Article> notuiarticles= articleDao.getAllArticleByIstui(1,9);
//        model.addAttribute("notuiarticles", notuiarticles);

        return "index";
    }


    @RequestMapping("get_banner_list")
    @ResponseBody
    public SaResult get_banner_list() {
        List <Banner> banners= bannerDao.getAllBanners();
        if (banners != null) {
            return SaResult.data(banners);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }


    // 关于天宙
    @RequestMapping("/about")
    public String about() {
        return "about";
    }

    // 历届活动
    @RequestMapping("/huodong")
    public String huodong() {
        return "huodong";
    }

    @RequestMapping("/huodong_detail")
    public String huodong_detail(Model model,@RequestParam(value = "setid", defaultValue = "") Long setid) {

        model.addAttribute("setid", setid);


        ZtSet ztSet= ztSetDao.getZtSetById(setid);
        model.addAttribute("ztSet", ztSet);

        List videocate= ztVideoCateDao.getList(setid);
        model.addAttribute("videocate", videocate);

        List<ZtImages> images = ztImagesDao.getImagesBySetid(setid);

        List<ArrayList<String>> imageArrayLists = new ArrayList<>();

        // 遍历images列表
        for (ZtImages imagedata : images) {
            String imageUrl = imagedata.getImages(); // 假设getImages()方法返回的是图片URL

            String[] imageArr;
            if (imageUrl.isEmpty()) {
                // 空字符串处理
                imageArr = new String[0]; // 创建一个空数组
            } else {
                imageArr = imageUrl.split(",");
            }

            // 将图片URL数组转换为ArrayList并添加到imageArrayLists列表中
            ArrayList<String> imageArrayList = new ArrayList<>(Arrays.asList(imageArr));
            imageArrayLists.add(imageArrayList);

            // 将图片URL数组设置回ZtImages对象
            imagedata.setImageUrls(imageArr);
        }


        model.addAttribute("images", images);

        return "huodong_detail";
    }

    /**
     * 手机端专题列表接口
     * @param pageNum
     * @param pageSize
     * @return
     */
    @RequestMapping("get_ztset_page_list")
    @ResponseBody
    public SaResult get_ztset_page_list(@RequestParam("page") Integer pageNum, @RequestParam("page_size") Integer pageSize) {
        PageResult<ZtSet> pageResult = ztSetDao.getZtSetByPageAndCondition(pageNum,pageSize,null,null);
        if (pageResult != null) {
            return SaResult.data(pageResult);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }


    /**
     * 专题页面加载
     * @param model
     * @param setid
     * @return
     */
    @RequestMapping("/video-2")
    public String video2(Model model,@RequestParam(value = "setid", defaultValue = "") Long setid) {

        model.addAttribute("setid", setid);


        ZtSet ztSet= ztSetDao.getZtSetById(setid);
        model.addAttribute("ztSet", ztSet);

        List videocate= ztVideoCateDao.getList(setid);
        model.addAttribute("videocate", videocate);

        List<ZtImages> images = ztImagesDao.getImagesBySetid(setid);

        List<ArrayList<String>> imageArrayLists = new ArrayList<>();

    // 遍历images列表
        for (ZtImages imagedata : images) {
            String imageUrl = imagedata.getImages(); // 假设getImages()方法返回的是图片URL

            String[] imageArr;
            if (imageUrl.isEmpty()) {
                // 空字符串处理
                imageArr = new String[0]; // 创建一个空数组
            } else {
                imageArr = imageUrl.split(",");
            }

            // 将图片URL数组转换为ArrayList并添加到imageArrayLists列表中
            ArrayList<String> imageArrayList = new ArrayList<>(Arrays.asList(imageArr));
            imageArrayLists.add(imageArrayList);

            // 将图片URL数组设置回ZtImages对象
            imagedata.setImageUrls(imageArr);
        }


        model.addAttribute("images", images);

        return "video2";
    }

    /**
     * 专题资讯详情
     * @param model
     * @param articleId
     * @return
     */
    @GetMapping("/new2/{id}.html")
    public String new2_detail(Model model,@PathVariable("id") Long articleId) {
        // 处理方法的逻辑，根据文章ID获取相应的文章内容，并返回相应的视图名称
        ZtArticle article = ztArticleDao.getArticleById(articleId);
        model.addAttribute("article", article); // 将文章对象添加到模型中
        ztArticleDao.incrementField(articleId,"hit");
        // 查询上一篇文章
        ZtArticle prevArticle = ztArticleDao.getPrevArticleById(articleId);
        model.addAttribute("prevArticle", prevArticle);

        // 查询下一篇文章
        ZtArticle nextArticle = ztArticleDao.getNextArticleById(articleId);
        model.addAttribute("nextArticle", nextArticle);
        return "new2detail";
    }
    // 天宙新闻页面加载
    @RequestMapping("/new")
    public String newpage(Model model,@RequestParam(value = "columnid", defaultValue = "") Long columnid,@RequestParam(value = "page", defaultValue = "1") Integer pageNum) {
        List<Webcolumn> columnlist = webcolumnDao.getAllParentColumn(3l);
        model.addAttribute("columns", columnlist);

        Long paramId = StringUtils.isEmpty(columnid) ? (columnlist.isEmpty() ? null : columnlist.get(0).getId()) : columnid;

        model.addAttribute("paramid", paramId);

        PageResult<Article> pageResult = articleDao.getArticlesByPageTopCondition(pageNum,10,paramId,0);

        // 在循环外部定义日期格式化器
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");

        Optional.ofNullable(pageResult)
                .map(PageResult::getData) // 获取data字段的值
                .ifPresent(data -> {
                    // 在循环外部定义一个ArrayList，用于存放更新后的文章对象
                    List<Article> updatedData = new ArrayList<>(data.size());
                    data.forEach(article -> {
                        String htmlContent = article.getContent(); // 获取原始HTML内容
                        if (htmlContent != null) { // 检查内容是否为空
                            Document doc = Jsoup.parse(htmlContent); // 使用Jsoup解析HTML
                            String plainTextContent = doc.text(); // 去掉所有HTML标签
                            article.setContent(plainTextContent); // 更新去掉HTML标签后的content

                            // 将日期转换并存放到更新后的文章对象中
                            String originalDate = article.getCreate_at(); // 假设获取日期的方法为getDateString()
                            try {
                                Date date = inputFormat.parse(originalDate);
                                String formattedDate = outputFormat.format(date);
                                article.setFormattedDate(formattedDate); // 假设设置格式化后日期的方法为setFormattedDate()
                            } catch (ParseException e) {
                                // 日期格式解析出现异常
                                e.printStackTrace();
                            }
                        }
                        updatedData.add(article); // 将更新后的文章对象添加到ArrayList中
                    });
                    pageResult.setData(updatedData); // 将更新后的文章列表放回PageResult对象中
                });

        model.addAttribute("newList", pageResult);

        model.addAttribute("currentPage", pageNum);
        return "new";
    }

    /**
     * 天宙新闻详情
     * @param model
     * @param articleId
     * @return
     */
    @GetMapping("/new/{id}.html")
    public String new_detail(Model model,@PathVariable("id") Long articleId) {
        // 处理方法的逻辑，根据文章ID获取相应的文章内容，并返回相应的视图名称
        Article article = articleDao.getArticleById(articleId);
        model.addAttribute("article", article); // 将文章对象添加到模型中
        articleDao.incrementField(articleId,"hit");
        // 查询上一篇文章
        Article prevArticle = articleDao.getPrevArticleById(articleId);
        model.addAttribute("prevArticle", prevArticle);

        // 查询下一篇文章
        Article nextArticle = articleDao.getNextArticleById(articleId);
        model.addAttribute("nextArticle", nextArticle);
        return "newdetail";
    }

    /**
     * 视频专区详情
     * @param model
     * @param articleId
     * @return
     */
    @GetMapping("/video/{id}.html")
    public String video_detail(Model model,@PathVariable("id") Long articleId) {
        // 处理方法的逻辑，根据文章ID获取相应的文章内容，并返回相应的视图名称
        Article article = articleDao.getArticleById(articleId);
        model.addAttribute("article", article); // 将文章对象添加到模型中
        articleDao.incrementField(articleId,"hit");

        return "videodetail";
    }

    // 文化
    @RequestMapping("/wenhua")
    public String wenhua() {
        return "wenhua";
    }


    // 主营业务
    @RequestMapping("/yewu")
    public String yewu() {
        return "yewu";
    }

    // 成功案例
    @RequestMapping("/case")
    public String casepage() {
        return "case";
    }

    // 荣誉资质
    @RequestMapping("/rongyu")
    public String rongyu() {
        return "rongyu";
    }


    // 关于天宙
    @RequestMapping("/video")
    public String video(Model model) {
        Article articletop= articleDao.getArticleByTopOne(13l);
        model.addAttribute("articletop", articletop);
        return "video";
    }

    /**
     * 手机端专题视频列表
     * @param pageNum
     * @param pageSize
     * @param setid
     * @param cateid
     * @return
     */
    @RequestMapping("get_ztvideo_page_list")
    @ResponseBody
    public SaResult get_ztvideo_page_list(@RequestParam("page") Integer pageNum, @RequestParam("page_size") Integer pageSize, @RequestParam(value = "setid", defaultValue = "") Long setid,@RequestParam(value = "cateid", defaultValue = "") Integer cateid) {
        PageResult<ZtVideo> pageResult = ztVideoDao.getZtVideosByPageAndCondition(pageNum,pageSize,setid,null,cateid);
        if (pageResult != null) {
            return SaResult.data(pageResult);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    /**
     * 手机端专题视频分类
     * @param setid
     * @return
     */
    @RequestMapping("get_ztvideo_cate_list")
    @ResponseBody
    public SaResult get_ztvideo_cate_list( @RequestParam(value = "setid", defaultValue = "") Long setid) {
        List videocate= ztVideoCateDao.getList(setid);
        if (videocate != null) {
            return SaResult.data(videocate);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }


    /**
     * 专题视频详情
     * @param model
     * @param articleId
     * @return
     */
    @GetMapping("/video2/{id}.html")
    public String video2_detail(Model model,@PathVariable("id") Long articleId) {
        // 处理方法的逻辑，根据文章ID获取相应的文章内容，并返回相应的视图名称
        ZtVideo video = ztVideoDao.getVideoById(articleId);
        model.addAttribute("article", video); // 将文章对象添加到模型中
        ztVideoDao.incrementField(articleId,"hit");
        return "videodetail";
    }


    @RequestMapping("get_video_page_list")
    @ResponseBody
    public SaResult get_video_page_list(@RequestParam("page") Integer pageNum, @RequestParam("page_size") Integer pageSize, @RequestParam(value = "columnid", defaultValue = "") Long columnid) {
        PageResult<Article> pageResult = articleDao.getArticlesByPageAndCondition(pageNum,pageSize,null,columnid,"sort_order");
        if (pageResult != null) {
            return SaResult.data(pageResult);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    /**
     * 获取资讯栏目子类
     * @param columnid
     * @return
     */
    @RequestMapping("get_article_cloumn_list")
    @ResponseBody
    public SaResult get_article_cloumn_list( @RequestParam(value = "columnid", defaultValue = "") Long columnid) {
        List<Webcolumn> columnlist = webcolumnDao.getAllParentColumn(columnid);
        if (columnlist != null) {
            return SaResult.data(columnlist);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    /**
     * PC&移动端资讯列表
     * @param pageNum
     * @param pageSize
     * @param columnid
     * @return
     */
    @RequestMapping("get_article_list")
    @ResponseBody
    public SaResult get_article_list(@RequestParam("page") Integer pageNum, @RequestParam("page_size") Integer pageSize, @RequestParam(value = "columnid", defaultValue = "") Long columnid) {
        PageResult<Article> pageResult = articleDao.getArticlesByPageTopCondition(pageNum,pageSize,columnid,0);


        // 在循环外部定义日期格式化器
        SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd");

        Optional.ofNullable(pageResult)
        .map(PageResult::getData) // 获取data字段的值
        .ifPresent(data -> {
            // 在循环外部定义一个ArrayList，用于存放更新后的文章对象
            List<Article> updatedData = new ArrayList<>(data.size());
            data.forEach(article -> {
                String htmlContent = article.getContent(); // 获取原始HTML内容
                if (htmlContent != null) { // 检查内容是否为空
                    Document doc = Jsoup.parse(htmlContent); // 使用Jsoup解析HTML
                    String plainTextContent = doc.text(); // 去掉所有HTML标签
                    article.setContent(plainTextContent); // 更新去掉HTML标签后的content

                    // 将日期转换并存放到更新后的文章对象中
                    String originalDate = article.getCreate_at(); // 假设获取日期的方法为getDateString()
                    try {
                        Date date = inputFormat.parse(originalDate);
                        String formattedDate = outputFormat.format(date);
                        article.setFormattedDate(formattedDate); // 假设设置格式化后日期的方法为setFormattedDate()
                    } catch (ParseException e) {
                        // 日期格式解析出现异常
                        e.printStackTrace();
                    }
                }
                updatedData.add(article); // 将更新后的文章对象添加到ArrayList中
            });
            pageResult.setData(updatedData); // 将更新后的文章列表放回PageResult对象中
        });
        if (pageResult != null) {
            return SaResult.data(pageResult);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    /**
     * 移动端资讯详情
     * @param id
     * @return
     */
    @RequestMapping("new_detail_data")
    @ResponseBody
    public SaResult new_detail_data(@RequestParam("id") Long id) {
        Article article = articleDao.getArticleById(id);
        if (article != null) {
            return SaResult.data(article);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    /**
     * PC资讯列表
     * @param pageNum
     * @param pageSize
     * @param setid
     * @return
     */
    @RequestMapping("get_article_page_list")
    @ResponseBody
    public SaResult get_article_page_list(@RequestParam("page") Integer pageNum, @RequestParam("page_size") Integer pageSize, @RequestParam(value = "setid", defaultValue = "") Long setid) {
        PageResult<ZtArticle> pageResult = ztArticleDao.getZtArticlesByPageAndCondition(pageNum,pageSize,setid);
        if (pageResult != null) {
            return SaResult.data(pageResult);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }


    /**
     * 移动端专题资讯详情
     * @param id
     * @return
     */
    @RequestMapping("zt_new_detail_data")
    @ResponseBody
    public SaResult zt_new_detail_data(@RequestParam("id") Long id) {
        ZtArticle  ztArticle = ztArticleDao.getArticleById(id);
        if (ztArticle != null) {
            return SaResult.data(ztArticle);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }

    @RequestMapping("get_ztset_detail")
    @ResponseBody
    public SaResult get_ztset_detail(@RequestParam("id") Long id) {
        ZtSet ztSet= ztSetDao.getZtSetById(id);
        if (ztSet != null) {
            return SaResult.data(ztSet);
        } else {
            // 数据不存在，返回错误信息
            return SaResult.error("数据不存在");
        }
    }





    /**
     * 移动端专题图片列表
     * @param setid
     * @return
     */
    @RequestMapping("zt_images_data")
    @ResponseBody
    public SaResult zt_images_data(@RequestParam("setid") Long setid) {

        List <ZtImages> images= ztImagesDao.getImagesBySetid(setid);
        // 初始化一个二维字符串数组，用于存储每个ZtImages对象中的图片URL数组
        List<ArrayList<String>> imageArrayLists = new ArrayList<>();

        // 遍历images列表
        for (ZtImages imagedata : images) {
            String imageUrl = imagedata.getImages(); // 假设getImages()方法返回的是图片URL

            String[] imageArr;
            if (imageUrl.isEmpty()) {
                // 空字符串处理
                imageArr = new String[0]; // 创建一个空数组
            } else {
                imageArr = imageUrl.split(",");
            }

            // 将图片URL数组转换为ArrayList并添加到imageArrayLists列表中
            ArrayList<String> imageArrayList = new ArrayList<>(Arrays.asList(imageArr));
            imageArrayLists.add(imageArrayList);

            // 将图片URL数组设置回ZtImages对象
            imagedata.setImageUrls(imageArr);
        }
        return SaResult.data(images);
    }


    // 招贤纳才
    @RequestMapping("/peple")

    public String peple(Model model) {
        List<Zhaopin> zhaopins = zhaopinDao.getAllZhaopins();
        model.addAttribute("zhaopins", zhaopins); // 将文章对象添加到模型中
        return "peple";
    }

    // 联系我们
    @RequestMapping("/lianxitz")
    public String lianxitz() {
        return "lianxitz";
    }
}
